package train48days;

import java.util.Scanner;

public class 走方格的方案数 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            System.out.println(dg(n,m));
        }
    }

    private static int dg(int n, int m) {
        if (n==0||m==0){
            return 1;
        }
        return dg(n-1,m)+dg(n,m-1);
//        import java.util.*;
//        public class Main{
//            public static void main(String ... args){
//                Scanner sc = new Scanner(System.in);
//                while(sc.hasNextInt()){
//                    // n个格子就有n + 1条线
//                    int n = sc.nextInt() + 1, m = sc.nextInt() + 1;
//                    // 避免处理边界问题（实际上空间消耗增加了）
//                    int[][] d = new int[n + 1][m + 1];
//                    // 初始子问题：只有一个点时有一条路，其他时候都为它上面的路和加左边的路和
//                    d[1][1] = 1;
//                    for(int i = 1; i <= n; i++){
//                        for(int j = 1; j <= m; j++){
//                            d[i][j] += d[i - 1][j] + d[i][j - 1];
//                        }
//                    }
//                    System.out.println(d[n][m]);
//                }
//            }
//        }
    }
}
